package cn.colat.micse.common.utils;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Utils {
    private static final String encryptStart = "WjHDqz85m8976oKEOXFHOkTu2jka8OsXbKIw84Z";
    private static final String encryptEnd = "wV73mzM5PypS5j479wkekXPEfT4ObHdEfsXUIJmp0h";

    /**
     * MD5加密操作
     */
    public static String sign(String plaintext) {
        StringBuilder sb = new StringBuilder();
        try {
            // 获取数据摘要器
            // 参数：加密的方式
            MessageDigest messageDigest = MessageDigest.getInstance("MD5");
            // 摘要数据
            // 参数：将要加密的明文转成byte数组
            String mixPlainText = encryptStart + plaintext + encryptEnd;
            byte[] digest = messageDigest.digest(mixPlainText.getBytes());
            // 加密操作
            for (byte b : digest) {
                // MD5加密的核心原理：将一个byte数组通过与int类型进&运算得到一个int类型的正整数
                int result = b & 0xff;
                // 可能得到的int数据会造成MD%加密的密文比较长，所以进行一个16进制的转换
                String hexString = Integer.toHexString(result);
                if (hexString.length() < 2) {
                    sb.append("0");
                }
                sb.append(hexString);
            }
            return sb.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return plaintext;
    }

    /**
     * 是否相等
     *
     * @param plaintext  明文
     * @param ciphertext 密文
     * @return 是否相等
     */
    public static boolean isEquals(String plaintext, String ciphertext) {
        return ciphertext.equals(sign(plaintext));
    }
}


